
#include <vector>
using namespace std;
#define  Individual VirtualInvertedListTerm* 

class VirtualInvertedListTerm;
class Token;
class Type;

class Species{

protected:
		Type* Genus;
		vector< Individual > Population;

public:
		Species( Individual );
		~Species( );
		Species(const Species&);
		
	public:
		//returns NULL on impossible to insert
		Individual insert( Individual );
		size_t size( ) const;
		Individual Species::operator[ ](size_t) const;
		const Type* getGenus( void ) const;
		bool belongToSpecie(Individual) const;

	public:		
		static bool areSameSpecie( Individual, Individual);		
		size_t linksTo( const Token*);
		//returns the number of times
		//the argument is used as a 
		//an element in the species
		
	};

		

 
